﻿//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
// 프로그램 명		: frmParts.cs
// 프로그램 기능		: Parts UI
// 클래스 기능		: 
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자			: 김승현, 조범준
// 개발일			: 2014-08-01
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// F/W 버전		    : Dot NET Compack Framework 4.0 Service Pack 1 Patch
// 라이센스			: Copyright ⓒ 2014-2014 All rights reserved.
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 명명규칙			: 클래스(class) 명				- "c" + 클래스명
//					  전역(private) 상수			- "MC_" + 상수명
//					  공용(public)  상수			- "PC_" + 상수명
//					  전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트
//													- "mv_" + 타입/obj_/hwnd_/stru_/coll_/del_ + 명
//					  공용(public)  변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트
//													- "pv_" + 타입/obj_/hwnd_/stru_/coll_/del_/evnt_ + 명
//					  공용(public)  속성(Property)	- "pp_" + 타입 + 속성명
//					  전역(private) 함수/API		- "mf_" + 함수명/API 함수명
//					  공용(public)  함수/API		- "pf_" + 함수명/API 함수명
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
// 개발자는 개발/수정시 위의 내용을 반드시 작성하며 내용이 일치하지 않을때에는 모든 사항을 개발자가 책임 진다.
//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Collections;
//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
namespace TimsXBX
{
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	/// <summary>frmParts 클래스</summary>
	///▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
	public partial class frmParts : Form
	{
		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [생성자/소멸자]
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>생성자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public frmParts(frmMain fMain, string sPartsCid, string sPartsOid, string sPartInfo)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_sPartsRootCid = sPartsCid;
			this.mv_sPartsRootOid = sPartsOid;
			this.mv_sPartInfoString = sPartInfo;
		}
		public frmParts(frmMain fMain, string nPartsCid, string nPartsOid)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_sPartsRootCid = nPartsCid;
			this.mv_sPartsRootOid = nPartsOid;
		}
		public frmParts(frmMain fMain, string nPartsOid)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
			this.mv_sPartsRootOid = nPartsOid;
		}
		public frmParts(frmMain fMain)
		{
			InitializeComponent();

			this.mv_frmMain = fMain;
		}
		public frmParts()
		{
			InitializeComponent();
			mf_Init(this);
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>소멸자</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		~frmParts()
		{
			mf_UnInit(this);
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 상수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "MC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>전역(private) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private const string MC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 상수 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 상수명 첫 문자는 "PC_" 로 시작
		//         - 전체를 영문 대문자로 하고 상수명이 긴 경우 '_'로 구분해서 명명
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		///<summary>공용(public) 상수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public const string PC_HELLO = "Hello...";
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 변수/객체/핸들/구조체/컬렉션/델리게이트 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mv_타입"/"mv_obj"/"mv_hwnd"/"mv_struc"/"mv_coll"/"mv_del" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>전역(private) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		private string mv_sHello = null;
		//---------------------------------------------------------------------------------------------------
		//메인 폼 객체 핸들
		//---------------------------------------------------------------------------------------------------
		private frmMain mv_frmMain = null;										//메인 폼 인스턴스 핸들
		private ComCls.cFunction mv_oFunc = null;								//공용함수 인스턴스 핸들
		//---------------------------------------------------------------------------------------------------
		private string mv_sRelatedCads_Views = null;							//Related Cads - View State
		private string mv_sPartsRootCid = null;
		private string mv_sPartsRootOid = null;
		private string mv_sPartInfoString = null;								//PartNo(PartName)
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 변수/객체/핸들/구조체/컬렉션/델리게이트/이벤트 - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pv_타입"/"pv_obj"/"pv_hwnd"/"pv_struc"/"pv_coll"/"pv_del"/"pv_event" 로 시작
		//         - 영문 대소문자로 시작하고 변수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 변수 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pv_sHello = null;
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 속성(Property:읽기 쓰기 선택적 가능) - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pp_타입" 로 시작
		//         - 영문 대소문자로 시작하고 속성명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 속성(Property) 선언 예</summary>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pp_bHello
		{
			get { return mv_sHello; }
			set { mv_sHello = value; }
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 함수/API - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "mf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [샘플 - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>전역(private) 함수 선언 예</summary>
			/// <param name="sStr">전역(private) 함수 인자 선언 예</param>
			/// <returns>string</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private string mf_Hello(string sStr)
			{
				try
				{
					sStr = "Hello...";
				}
				catch (Exception ex)
				{
					throw ex;
				}

				return sStr;
			}

			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>클래스 초기화</summary>
			/// <param name="objClass">클래스 객체 인스턴스</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_Init(frmParts objClass)
			{
				try
				{
					//클래스 초기화
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>클래스 마무리</summary>
			/// <param name="objClass">클래스 객체 인스턴스</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_UnInit(frmParts objClass)
			{
				try
				{
					//클래스 마무리
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [공통부분 - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Tab Page 내 컴포넌트 항목 초기화</summary>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_InitAllTabPages()
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//ProfileCard
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvProfileCard, 0, true, false);
					this.mv_oFunc.pf_DataGridViewInit(this.dgvSubProfileCard, 0, true, false);
					//버튼비활성화
					this.btnProfileCard_Edit.Enabled = false;			//편집(Edit)버튼 비활성화
					this.btnProfileCard_Delete.Enabled = false;			//삭제(Delete)버튼 비활성화
					this.btnProfileCard_Ok.Enabled = false;				//저장(OK)버튼 비활성화
					this.btnProfileCard_Cancel.Enabled = false;			//취소(Cancel)버튼 비활성화
					//그리드 비활성
					this.dgvProfileCard_Value.ReadOnly = true;
					//---------------------------------------------------------------------------------------------------
					//BOM
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvBom, 0, true, false);
					//버튼비활성화
					this.btnBom_Edit.Enabled = false;
					this.btnBom_AddNewPart.Enabled = false;
					this.btnBom_AddExistPart.Enabled = false;
					this.btnBom_ReplaceNewPart.Enabled = false;
					this.btnBom_ReplaceExistPart.Enabled = false;
					this.btnBom_Delete.Enabled = false;
					this.btnBom_Reports.Enabled = false;
					this.btnBom_Save.Enabled = false;
					this.btnBom_Reset.Enabled = false;
					this.btnBom_Cancel.Enabled = false;
					this.dgvBom_ChkBox.ReadOnly = true;
					this.dgvBom_Seq.ReadOnly = true;
					this.dgvBom_Qty.ReadOnly = true;

					this.cmbBom_Views.SelectedIndex = 0;
					//---------------------------------------------------------------------------------------------------
					//Changes
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvChanges, 0, true, false);
					//버튼 비활성화
					this.btnChanges_Search.Enabled = false;
					this.btnChanges_Delete.Enabled = false;
					this.btnChanges_Reports.Enabled = false;

					this.cmbChanges_View.SelectedIndex = 0;
					//---------------------------------------------------------------------------------------------------
					//Related Cads
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvRelatedCads, 0, true, false);
					//버튼 비활성화
					this.btnRelatedCads_NewCads2D.Enabled = false;
					this.btnRelatedCads_NewCads3D.Enabled = false;
					this.btnRelatedCads_SearchCads.Enabled = false;
					this.btnRelatedCads_Delete.Enabled = false;
					this.btnRelatedCads_Reports.Enabled = false;

					this.cmbRelatedCads_View.SelectedIndex = 0;
					//---------------------------------------------------------------------------------------------------
					//Related Docs
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvRelatedDocs, 0, true, false);
					//버튼 비활성화
					this.btnRelatedDocs_NewDocs.Enabled = false;
					this.btnRelatedDocs_SearchDocs.Enabled = false;
					this.btnRelatedDocs_Delete.Enabled = false;
					this.btnRelatedDocs_Reports.Enabled = false;

					this.cmbRelatedDocs_View.SelectedIndex = 0;
					//---------------------------------------------------------------------------------------------------
					//Alternate Parts
					//---------------------------------------------------------------------------------------------------
					//---------------------------------------------------------------------------------------------------
					//Revision
					//---------------------------------------------------------------------------------------------------
					//데이터그리드 초기화
					this.mv_oFunc.pf_DataGridViewInit(this.dgvRevision, 0, true, false);
					//버튼 비활성화
					this.btnRevision_Revise.Enabled = false;
					this.btnRevision_Reports.Enabled = false;
					//---------------------------------------------------------------------------------------------------
					//Life Cycle
					//---------------------------------------------------------------------------------------------------
					//---------------------------------------------------------------------------------------------------
					//History
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>왼쪽하단 메뉴 선택부분 배경색 변경</summary>
			/// <param name="oToolStrip">ToolStrip 객체</param>
			/// <param name="nSelectedIndex">선택된 인덱스번호</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_SelectToolMenu(ToolStrip oToolStrip, int nSelectedIndex)
			{
				try
				{
					for (int nNum = 0; nNum < oToolStrip.Items.Count; nNum++)
					{
						//---------------------------------------------------------------------------------------------------
						//선택된 부분 Index번호인 경우 -> 선택부분만 특정 색 변경
						//---------------------------------------------------------------------------------------------------
						if (nNum == nSelectedIndex)
						{
							oToolStrip.Items[nNum].BackColor = Color.Tomato;
						}
						//---------------------------------------------------------------------------------------------------
						//나머지 부분 -> 기본 색으로 변경
						//---------------------------------------------------------------------------------------------------
						else
						{
							oToolStrip.Items[nNum].BackColor = SystemColors.Control;
						}
					}
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>왼쪽하단 메뉴 변경시 선택된 트리 노드 유지(선택된 노드로 다른 메뉴에서도 바로 조회될수 있도록)</summary>
			/// <param name="oTreeView">트리 객체</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_OccurTreeNodeSelect(TreeView oTreeView)
			{
				TreeNode oTreeNode = null;

				try
				{
					oTreeNode = oTreeView.SelectedNode;
					oTreeView.SelectedNode = null;
					oTreeView.SelectedNode = oTreeNode;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>트리 노드 선택 시 탭 페이지 별 진행 작업</summary>
			/// <param name="nNodeLevel">노드레벨</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_TabPageJob_SelectNode()
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//Profile Card
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_ProfileCard"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//선택된 Part의 Property 및 Value 읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadProfileCardGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
							//---------------------------------------------------------------------------------------------------
							//선택된 Part의 Specification 리스트 읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadSubProfileCardGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnProfileCard_Edit.Enabled = true;			//편집(Edit)버튼 활성화
							this.btnProfileCard_Delete.Enabled = true;			//삭제(Delete)버튼 활성화
							this.btnProfileCard_Ok.Enabled = false;				//저장(Ok)버튼 비활성화
							this.btnProfileCard_Cancel.Enabled = false;			//취소(Cancel)버튼 비활성화
							this.dgvProfileCard_Value.ReadOnly = true;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//BOM
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_Bom"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//선택된 Part의 BOM 정보 읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadBOMGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnBom_Edit.Enabled = true;					//편집(Edit)버튼 활성화
							this.btnBom_AddNewPart.Enabled = false;				//추가(New Part) 버튼 활성화
							this.btnBom_AddExistPart.Enabled = false;			//추가(Exist Part) 버튼 활성화
							this.btnBom_ReplaceNewPart.Enabled = false;			//추가(Replace Part) 버튼 활성화
							this.btnBom_ReplaceExistPart.Enabled = false;		//추가(Replace Exist Part) 버튼 활성화
							this.btnBom_Delete.Enabled = false;					//삭제(Delete) 버튼 활성화
							this.btnBom_Reports.Enabled = true;					//리포트(Report)버튼 활성화

							if (this.dgvBom.Rows.Count > 0)
							{
								this.dgvBom.Rows[0].ReadOnly = true;
							}
						}
					}
					//---------------------------------------------------------------------------------------------------
					//Changes
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_Changes"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnChanges_Search.Enabled = true;				//검색(Search)버튼 활성화
							this.btnChanges_Delete.Enabled = true;				//삭제(Delete)버튼 활성화
							this.btnChanges_Reports.Enabled = true;				//리포트(Report)버튼 활성화
						}
					}
					//---------------------------------------------------------------------------------------------------
					//Related Cads
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_RelatedCads"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//선택된 Part에 연결된 Cad 읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text), this.mv_sRelatedCads_Views);
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnRelatedCads_NewCads2D.Enabled = true;				//추가(New CAD 2D)버튼 활성화
							this.btnRelatedCads_NewCads3D.Enabled = true;				//추가(New CAD 3D)버튼 활성화
							this.btnRelatedCads_SearchCads.Enabled = true;				//검색(Search)버튼 활성화
							this.btnRelatedCads_Delete.Enabled = true;					//삭제(Delete)버튼 활성화
							this.btnRelatedCads_Reports.Enabled = true;					//리포트(Report)버튼 활성화
						}
					}
					//---------------------------------------------------------------------------------------------------
					//Related Docs
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_RelatedDocs"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnRelatedDocs_NewDocs.Enabled = true;					//추가(NewDoc)버튼 활성화
							this.btnRelatedDocs_SearchDocs.Enabled = true;				//검색(Search)버튼 활성화
							this.btnRelatedDocs_Delete.Enabled = true;					//삭제(Delete)버튼 활성화
							this.btnRelatedDocs_Reports.Enabled = true;					//리포트(Report)버튼 활성화
						}
					}
					//---------------------------------------------------------------------------------------------------
					//Alternate Parts
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_AlternateParts"))
					{
					}
					//---------------------------------------------------------------------------------------------------
					//Revision
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_Revision"))
					{
						if (this.treeParts.SelectedNode != null)
						{
							//---------------------------------------------------------------------------------------------------
							//선택된 Part의 리비젼 정보 읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadRevisionGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
							//---------------------------------------------------------------------------------------------------
							//기본 버튼 활성화
							//---------------------------------------------------------------------------------------------------
							this.btnRevision_Revise.Enabled = true;						//개정(Revise)버튼 활성화
							this.btnRevision_Reports.Enabled = true;					//리포트(Report)버튼 활성화
						}
					}
					//---------------------------------------------------------------------------------------------------
					//LifeCycle
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_LifeCycle"))
					{
					}
					//---------------------------------------------------------------------------------------------------
					//History
					//---------------------------------------------------------------------------------------------------
					if (this.tabParts.SelectedIndex == this.tabParts.TabPages.IndexOfKey("tabParts_History"))
					{
					}
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>웹 파즈 Url 만들기(TCUD)</summary>
			/// <param name="eCommand">트랜잭션 처리시 명령</param>
			/// <param name="sSID">트랜잭션 처리시 세션 ID</param>
			/// <param name="nRow">트랜잭션 처리시 데이터그리드뷰 행번호</param>
			/// <param name="sUrl">트랜잭션 처리시WebParse 경로 전달</param>
			/// <returns>bool</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private bool mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND eCommand, string sSID, DataGridView oDataGridView, string sColName, int nRow, ref string sUrl, string sWebSql)
			{
				bool bResult = true;
				string sStyle = null;
				string sCommand = null;
				bool bJobMode = false;
				string sJobMode = null;

				try
				{
					sStyle = ComCls.cConst.PC_WEBSQL_CMD_SP;
					//---------------------------------------------------------------------------------------------------
					//트랜잭션 모드 명령어 & 입력/수정/삭제 작업 처리
					//---------------------------------------------------------------------------------------------------
					switch (eCommand)
					{
						//데이터베이스 연결
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT:
							sCommand = string.Format("{0}={1}", sStyle, ComCls.cConst.PC_DB_TRANSACTION_CONNECT);

							break;
						//데이터베이스 트랜잭션 시작
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN:
							sCommand = string.Format("{0}={1}&{2}={3}",
													sStyle, ComCls.cConst.PC_DB_TRANSACTION_BEGINTRAN,
													ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

							break;
						//데이터베이스 Sql 처리(입력/수정/삭제)
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL:
							if (sColName.Contains("Chk") == true)
							{
								bJobMode = Convert.ToBoolean(oDataGridView.Rows[nRow].Cells[sColName].Value);
								if (bJobMode == true)
								{
									//데이터베이스 Sql 명령 만들기
									sCommand = sWebSql;
								}
								else
								{
									bResult = false;
								}
							}
							else
							{
								sJobMode = oDataGridView.Rows[nRow].Cells[sColName].Value.ToString();
								if (sJobMode != ComCls.cConst.PC_DB_JOBMODE_READ)
								{
									//데이터베이스 Sql 명령 만들기
									sCommand = sWebSql;
								}
								else
								{
									bResult = false;
								}
							}
							break;
						//데이터베이스 트랜잭션 완료
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT:
							sCommand = string.Format("{0}={1}&{2}={3}",
													sStyle, ComCls.cConst.PC_DB_TRANSACTION_COMMIT,
													ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

							break;
						//데이터베이스 트랜잭션 취소
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK:
							sCommand = string.Format("{0}={1}&{2}={3}",
													sStyle, ComCls.cConst.PC_DB_TRANSACTION_ROLLBACK,
													ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

							break;
						//데이터베이스 연결 끊기
						case ComCls.cConst.PE_DB_TRANSACTION_COMMAND.DISCONNECT:
							sCommand = string.Format("{0}={1}&{2}={3}",
													sStyle, ComCls.cConst.PC_DB_TRANSACTION_DISCONNECT,
													ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);

							break;
					}
					//---------------------------------------------------------------------------------------------------
					//전체 경로 만들기
					//---------------------------------------------------------------------------------------------------
					if (bResult == true)
					{
						sUrl = string.Format("{0}?{1}={2}&{3}={4}&{5}={6}&{7}",
											ComCls.cConst.PC_WEBSQL_WEBPARSE_URL,
											ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_TCUD,
											ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
											ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
											sCommand);
					}
					else sUrl = null;
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					sUrl = null;
					bResult = false;

					throw ex;
				}

				return bResult;
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Profile Card - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Profile Card] 트리에서 선택된 Part의 해당정보 그리드 출력</summary>
			/// <param name="nCID">노드 ClassID</param>
			/// <param name="nOID">노드 ObjectID(Key)</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_ReadProfileCardGridView(int nCID, int nOID)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 결과 관련
				//---------------------------------------------------------------------------------------------------
				string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
				string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_XML,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_PROFILECARD_R",
												"iCID", nCID,
												"iOID", nOID);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.XML, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							this.mv_oFunc.pf_WpOutputDataSetToDataGridViewProperty(ComCls.cConst.PE_WEBSQL_TYPE.XML, this.dgvProfileCard, sDataSet, oDataSet, true);
						}
						else
						{
							ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NODATA, ComCls.cConst.PC_MSG_APPBOM_SELECT_TITLE);
						}
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadProfileCardGridView()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					//---------------------------------------------------------------------------------------------------
					//Debug Agent 인스턴스 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (this.mv_frmMain.pv_frmDebugAgent != null)
					{
						this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
					}
					//---------------------------------------------------------------------------------------------------
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Profile Card] 트리에서 선택된 Parts의 연결된 Cad 정보 그리드 출력</summary>
			/// <param name="nCID">노드 ClassID</param>
			/// <param name="nOID">노드 ObjectID(Key)</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_ReadSubProfileCardGridView(int nITEMSCID, int nITEMSOID)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 결과 관련
				//---------------------------------------------------------------------------------------------------
				string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
				string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_PROFILECARD_SUB_R",
												"iITEMS_CID", nITEMSCID,
												"iITEMS_OID", nITEMSOID);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							this.mv_oFunc.pf_WpOutputDataSetToDataGridView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, this.dgvSubProfileCard, sDataSet, oDataSet, true);
						}
						else
						{
							this.dgvSubProfileCard.Rows.Clear();
						}
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadSubProfileCardGridView()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					//---------------------------------------------------------------------------------------------------
					//Debug Agent 인스턴스 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (this.mv_frmMain.pv_frmDebugAgent != null)
					{
						this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
					}
					//---------------------------------------------------------------------------------------------------
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Profile Card] 트리에서 선택된 Projects(Project Group/Project/Product)의 정보 - 수정/삭제</summary>
			/// <param name="sSpName">프로시져명</param>
			/// <param name="sJobMode">작업모드</param>
			/// <param name="sJOBTYPE">PROJECTS 타입</param>
			/// <param name="nOid">노드 ObjectID(Key)</param>
			/// <param name="sName">PROJECTS 명</param>
			/// <param name="sNo">PROJECTS 번호</param>
			/// <param name="sState">PROJECTS 상태</param>
			/// <param name="sDesc">PROJECTS 설명</param>
			/// <returns>bool</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private bool mf_CUDPartsProfileCard(string sSpName, string sJobMode, int nCid, int nOid)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				bool nResultOK = false;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}&{28}={29}&{30}={31}&{32}={33}&{34}={35}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_CUD,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, sSpName,
												"iJOBMODE", sJobMode,
												"iCID", nCid,
												"iOID", nOid,
												"iDESC", this.dgvProfileCard.Rows[3].Cells["dgvProfileCard_Value"].Value.ToString(),
												"iMODELNO", this.dgvProfileCard.Rows[7].Cells["dgvProfileCard_Value"].Value.ToString(),
												"iMAKER", this.dgvProfileCard.Rows[8].Cells["dgvProfileCard_CodeValue"].Value.ToString(),
												"iMATERIAL", this.dgvProfileCard.Rows[9].Cells["dgvProfileCard_CodeValue"].Value.ToString(),
												"iINSPECTION", this.dgvProfileCard.Rows[10].Cells["dgvProfileCard_CodeValue"].Value.ToString(),
												"iDETAILSPEC", this.dgvProfileCard.Rows[11].Cells["dgvProfileCard_Value"].Value.ToString(),
												"iUOW", this.dgvProfileCard.Rows[12].Cells["dgvProfileCard_CodeValue"].Value.ToString(),
												"iUOM", this.dgvProfileCard.Rows[6].Cells["dgvProfileCard_CodeValue"].Value.ToString(),
												"iDIMENSION", this.dgvProfileCard.Rows[13].Cells["dgvProfileCard_Value"].Value.ToString(),
												"iWEIGHT", this.dgvProfileCard.Rows[14].Cells["dgvProfileCard_Value"].Value.ToString(),
												"iREMARK", this.dgvProfileCard.Rows[15].Cells["dgvProfileCard_Value"].Value.ToString()
												);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.CUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							nResultOK = true;

							if (sJobMode.Contains("CREATE") || sJobMode.Contains("UPDATE"))
								ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
							else if (sJobMode.Contains("DELETE"))
								ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_DELETE), ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);
						}
						else
							ComCls.cException.MessageBoxShow(this, string.Format("{0}건", nRowCount), ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_CUDPartsProfileCard()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				//---------------------------------------------------------------------------------------------------
				//결과 반환
				//---------------------------------------------------------------------------------------------------
				return nResultOK;
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>그리드에서 Cell 변경이 가능한지 체크 후 Row 색 변경</summary>
			/// <param name="bEditMode">Edit 모드</param>
			/// <param name="oDataGridView">적용 그리드</param>
			/// <param name="sPropertyColName">속성 컬럼 명</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_CheckCellValeChangeOk(bool bEditMode, DataGridView oDataGridView, string sPropertyColName)
			{
				string sProperty = null;

				try
				{
					if (oDataGridView != null && oDataGridView.Rows.Count > 0)
					{
						if (bEditMode == true)
						{
							for (int nRow = 0; nRow < oDataGridView.Rows.Count; nRow++)
							{
								sProperty = oDataGridView.Rows[nRow].Cells[sPropertyColName].Value.ToString().Trim();

								if (sProperty == "PART TYPE" || sProperty == "PART NUMBER" || sProperty == "REVISION" || sProperty == "STATE" || sProperty == "CREATED BY" ||
									sProperty == "CREATION DATE" || sProperty == "MODIFICATION BY" || sProperty == "MODIFICATION DATE" || sProperty == "APPROVED BY" || sProperty == "APPROVAL DATE")
								{
									oDataGridView.Rows[nRow].DefaultCellStyle.BackColor = Color.Silver;
								}
								if (sProperty == "PART TYPE" || sProperty == "PART NUMBER" || sProperty == "PART NAME" || sProperty == "REVISION" || sProperty == "STATE" ||
									sProperty == "MAKER PART NO")
								{
									oDataGridView.Rows[nRow].DefaultCellStyle.ForeColor = Color.Red;
								}
							}
						}
						else
						{
							for (int nRow = 0; nRow < oDataGridView.Rows.Count; nRow++)
							{
								sProperty = oDataGridView.Rows[nRow].Cells[sPropertyColName].Value.ToString().Trim();

								if (sProperty == "PART TYPE" || sProperty == "PART NUMBER" || sProperty == "REVISION" || sProperty == "STATE" || sProperty == "CREATED BY" ||
									sProperty == "CREATION DATE" || sProperty == "MODIFICATION BY" || sProperty == "MODIFICATION DATE" || sProperty == "APPROVED BY" || sProperty == "APPROVAL DATE")
								{
									oDataGridView.Rows[nRow].DefaultCellStyle.BackColor = Color.White;
								}
								if (sProperty == "PART TYPE" || sProperty == "PART NUMBER" || sProperty == "PART NAME" || sProperty == "REVISION" || sProperty == "STATE" ||
									sProperty == "MAKER PART NO")
								{
									oDataGridView.Rows[nRow].DefaultCellStyle.ForeColor = Color.Black;
								}

							}
						}
					}
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>그리드에서 Cell 변경 불가능 항목 Lock 걸기</summary>
			/// <param name="oDataGridView">적용 그리드</param>
			/// <param name="eDataGridView">선택된 셀 이벤트</param>
			/// <param name="sPropertyColName">속성 컬럼 명</param>
			/// <param name="sValueColName">값 컬럼 명</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_LockCellValue(DataGridView oDataGridView, DataGridViewCellEventArgs eDataGridView, string sPropertyColName, string sValueColName, string sCodeColName)
			{
				string sProperty = null;

				try
				{
					if (oDataGridView != null && eDataGridView != null && sPropertyColName != null && sValueColName != null)
					{
						sProperty = oDataGridView.Rows[eDataGridView.RowIndex].Cells[sPropertyColName].Value.ToString().Trim();

						if (sProperty == "PART TYPE" || sProperty == "PART NUMBER" || sProperty == "REVISION" || sProperty == "STATE" || sProperty == "CREATED BY" ||
							sProperty == "CREATION DATE" || sProperty == "MODIFICATION BY" || sProperty == "MODIFICATION DATE" || sProperty == "APPROVED BY" || sProperty == "APPROVAL DATE" ||
							sProperty == "UNIT OF MEASURE" || sProperty == "MAKER" || sProperty == "MATERIAL" || sProperty == "INSPECTION" || sProperty == "UNIT OF WEIGHT")
						{
							oDataGridView.Rows[eDataGridView.RowIndex].Cells[sValueColName].ReadOnly = true;
						}

						if (sProperty == "UNIT OF MEASURE" || sProperty == "MAKER" || sProperty == "MATERIAL" || sProperty == "INSPECTION" || sProperty == "UNIT OF WEIGHT")
						{
							if (sProperty == "UNIT OF MEASURE") sProperty = "UOM";
							if (sProperty == "UNIT OF WEIGHT") sProperty = "UOW";

							frmSearchCodeList ofrmSearchCodeList = new frmSearchCodeList(this.dgvProfileCard, eDataGridView.RowIndex, sValueColName, sCodeColName, sProperty);
							ofrmSearchCodeList.ShowDialog();
						}
					}
				}
				catch (Exception ex)
				{
					throw ex;
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [BOM - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[BOM] 트리에서 선택된 Parts의 BOM 정보 읽기</summary>
			/// <param name="nITEMS_CID">노드 Items ClassID</param>
			/// <param name="nITEMS_OID">노드 Items ObjectID(Key)</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_ReadBOMGridView(int nITEMS_CID, int nITEMS_OID)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 결과 관련
				//---------------------------------------------------------------------------------------------------
				string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
				string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_BOM_R",
												"iITEMS_CID", nITEMS_CID,
												"iITEMS_OID", nITEMS_OID);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							this.mv_oFunc.pf_WpOutputDataSetToDataGridView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, this.dgvBom, sDataSet, oDataSet, true);
						}
						else
						{
							//ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NODATA, ComCls.cConst.PC_MSG_APPBOM_SELECT_TITLE);
							this.dgvBom.Rows.Clear();
						}
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadBOMGridView()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					//---------------------------------------------------------------------------------------------------
					//Debug Agent 인스턴스 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (this.mv_frmMain.pv_frmDebugAgent != null)
					{
						this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
					}
					//---------------------------------------------------------------------------------------------------
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Changes - 전역(private) 함수/API]
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Related CADs - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Related Cads] 트리에서 선택된 Parts에 연결된 Cads 정보 출력</summary>
			/// <param name="nITEMS_CID">노드 Items ClassID</param>
			/// <param name="nITEMS_OID">노드 Items ObjectID(Key)</param>
			/// <param name="sState">출력 상태</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			public void mf_ReadRelatedCadGridView(int nITEMS_CID, int nITEMS_OID, string sState)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 결과 관련
				//---------------------------------------------------------------------------------------------------
				string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
				string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_RELATEDCADS_R",
												"iITEM_CID", nITEMS_CID,
												"iITEM_OID", nITEMS_OID,
												"iSTATE", sState);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							this.mv_oFunc.pf_WpOutputDataSetToDataGridView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, this.dgvRelatedCads, sDataSet, oDataSet, true);
						}
						else
						{
							//ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NODATA, ComCls.cConst.PC_MSG_APPBOM_SELECT_TITLE);
							this.dgvRelatedCads.Rows.Clear();
						}
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadRelatedCadGridView()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					//---------------------------------------------------------------------------------------------------
					//Debug Agent 인스턴스 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (this.mv_frmMain.pv_frmDebugAgent != null)
					{
						this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
					}
					//---------------------------------------------------------------------------------------------------
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Related DOCs - 전역(private) 함수/API]
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Alternate Parts - 전역(private) 함수/API]
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Revision - 전역(private) 함수/API]
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Revision] 트리에서 선택된 Parts의 리비전 정보 읽기</summary>
			/// <param name="nITEMS_CID">노드 Items ClassID</param>
			/// <param name="nITEMS_OID">노드 Items ObjectID(Key)</param>
			/// <returns>void</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private void mf_ReadRevisionGridView(int nITEMS_CID, int nITEMS_OID)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 결과 관련
				//---------------------------------------------------------------------------------------------------
				string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
				string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_REVISIONS_R",
												"iITEMS_CID", nITEMS_CID,
												"iITEMS_OID", nITEMS_OID);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							this.mv_oFunc.pf_WpOutputDataSetToDataGridView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, this.dgvRevision, sDataSet, oDataSet, true);
						}
						else
						{
							//ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NODATA, ComCls.cConst.PC_MSG_APPBOM_SELECT_TITLE);
							this.dgvRevision.Rows.Clear();
						}
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_ReadRevisionGridView()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				finally
				{
					//---------------------------------------------------------------------------------------------------
					//Debug Agent 인스턴스 있는 경우
					//---------------------------------------------------------------------------------------------------
					if (this.mv_frmMain.pv_frmDebugAgent != null)
					{
						this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
					}
					//---------------------------------------------------------------------------------------------------
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>[Revision] 트리에서 선택된 Parts의 리비전을 Release / Working 상태로 변경</summary>
			/// <param name="nDocsCid">노드 Items ClassID</param>
			/// <param name="nDocsOid">노드 Items ObjectID(Key)</param>
			/// <param name="sJobMode">작업모드(변경할 상태)</param>
			/// <returns>bool</returns>
			///-------------------------------------------------------------------------------------------------------------------------
			private bool mf_CUDChangeRevisionStatus(int nItemsCid, int nItemsOid, string sJobMode)
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 정보 관련
				//---------------------------------------------------------------------------------------------------
				string sWebSql = null;
				string sWebArg = null;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행 관련
				//---------------------------------------------------------------------------------------------------
				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				bool nResultOK = false;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Web Sql 경로 만들기
					//---------------------------------------------------------------------------------------------------
					sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
					sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}",
												ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_CUD,
												ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
												ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
												ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_REVISIONS_CUD",
												"iJOBMODE", sJobMode,
												"iCID", nItemsCid,
												"iOID", nItemsOid,
												"iUSEROID", 0);
					sWebSql += sWebArg;
					//---------------------------------------------------------------------------------------------------
					//Web Sql 실행
					//---------------------------------------------------------------------------------------------------
					if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.CUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
					{
						if (nRowCount > 0)
						{
							nResultOK = true;

							ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
						}
						else
							ComCls.cException.MessageBoxShow(this, string.Format("{0}건", nRowCount), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
					}
					else
					{
						if (sErrorMsg != null)
						{
							ComCls.cException.ExceptionMessage(this, sErrorMsg, "mf_CUDChangeRevisionStatus()");
						}
					}
					//---------------------------------------------------------------------------------------------------
				}
				catch (Exception ex)
				{
					throw ex;
				}
				//---------------------------------------------------------------------------------------------------
				//결과 반환
				//---------------------------------------------------------------------------------------------------
				return nResultOK;
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [LifeCycle - 전역(private) 함수/API]
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [History - 전역(private) 함수/API]
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [공용(public) 함수(Method)/API - 클래스 외부로 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 첫 문자를 "pf_" + 함수명 또는 API 함수명 으로 시작
		//         - 영문 대소문자로 시작하고 함수명이 긴 경우 대소문자 구분해서 명명('_' 사용가능!)
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>공용(public) 함수(Method) 선언 예</summary>
		/// <param name="sStr">공용(public) 함수(Method) 인자 선언 예</param>
		/// <returns>string</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		public string pf_Hello(string sStr)
		{
			try
			{
				sStr = "Hello...";
			}
			catch (Exception ex)
			{
				throw ex;
			}

			return sStr;
		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>왼쪽상단 Parts 구조 트리</summary>
		/// <param name="nLevel">출력할 Depth</param>
		/// <param name="nRootId">루트ID</param>
		/// <returns>void</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		public void pf_ReadPartsTreeView(int nLevel, int nRootId)
		{
			//---------------------------------------------------------------------------------------------------
			//Web Sql 정보 관련
			//---------------------------------------------------------------------------------------------------
			string sWebSql = null;
			string sWebArg = null;
			//---------------------------------------------------------------------------------------------------
			//Web Sql 실행 관련
			//---------------------------------------------------------------------------------------------------
			string sDataSet = null;
			DataSet oDataSet = null;
			int nRowCount = 0;
			int nColCount = 0;
			string sErrorMsg = null;
			//---------------------------------------------------------------------------------------------------
			//Web Sql 결과 관련
			//---------------------------------------------------------------------------------------------------
			string[] saColSepa = new string[] { ComCls.cConst.PC_SEPARATOR_COL };
			string[] saRowSepa = new string[] { ComCls.cConst.PC_SEPARATOR_ROW };

			try
			{
				//---------------------------------------------------------------------------------------------------
				//Web Sql 경로 만들기
				//---------------------------------------------------------------------------------------------------
				sWebSql = ComCls.cConst.PC_WEBSQL_WEBPARSE_URL;
				sWebArg = string.Format("?{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}",
											ComCls.cConst.PC_WEBSQL_MODE, ComCls.cConst.PC_WEBSQL_MODE_R,
											ComCls.cConst.PC_WEBSQL_TYPE, ComCls.cConst.PC_WEBSQL_TYPE_PARSE,
											ComCls.cConst.PC_WEBSQL_STYLE, ComCls.cConst.PC_WEBSQL_STYLE_SP,
											ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_TREE_R",
											"iLevel", nLevel,
											"iRootID", nRootId);
				sWebSql += sWebArg;
				//---------------------------------------------------------------------------------------------------
				//Web Sql 실행
				//---------------------------------------------------------------------------------------------------
				if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.R, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg) == true)
				{
					if (nRowCount > 0)
					{
						this.mv_oFunc.pf_WpOutputDataSetToTreeView(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, this.treeParts, null, "-1", sDataSet, oDataSet, nLevel, true, false);
					}
					else
					{
						this.treeParts.Nodes.Clear();
						ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NODATA, ComCls.cConst.PC_MSG_APPBOM_SELECT_TITLE);
					}
				}
				else
				{
					if (sErrorMsg != null)
					{
						ComCls.cException.ExceptionMessage(this, sErrorMsg, "pf_ReadPartsTreeView()");
					}
				}
				//---------------------------------------------------------------------------------------------------
			}
			catch (Exception ex)
			{
				throw ex;
			}
			finally
			{
				//---------------------------------------------------------------------------------------------------
				//Debug Agent 인스턴스 있는 경우
				//---------------------------------------------------------------------------------------------------
				if (this.mv_frmMain.pv_frmDebugAgent != null)
				{
					this.mv_frmMain.pv_frmDebugAgent.pf_OutputDebugInfo(ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sWebSql, sDataSet, oDataSet);
				}
				//---------------------------------------------------------------------------------------------------
			}

		}
		///-------------------------------------------------------------------------------------------------------------------------
		/// <summary>트리에서 노드 검색</summary>
		/// <param name="sKey">검색할 노드의 키</param>
		/// <returns>TreeNode</returns>
		///-------------------------------------------------------------------------------------------------------------------------
		public TreeNode pf_SearchTreeNode(TreeNodeCollection objNodes, string sKey)
		{
			TreeNode oSearchTreeNode = null;

			try
			{
				//---------------------------------------------------------------------------------------------------
				//Tree Collection에서 노드 Key로 검색
				//---------------------------------------------------------------------------------------------------
				foreach (TreeNode oNode in objNodes)
				{
					if (oNode.Name == sKey)
					{
						oSearchTreeNode = oNode;
						break;
					}
					else
					{
						TreeNode findNode = pf_SearchTreeNode(oNode.Nodes, sKey);
						if (findNode != null)
						{
							oSearchTreeNode = findNode;
						}
					}
				}
			}
			catch (Exception ex)
			{
				throw ex;
			}
			return oSearchTreeNode;
		}
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
		#region [전역(private) 시스템 이벤트함수 - 클래스 내부만 노출]
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		//명명규칙 - 없음!
		//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Form 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Form 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 로드 될 때 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmParts_Load(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//공용함수 인스턴스 생성
					//---------------------------------------------------------------------------------------------------
					this.mv_oFunc = new ComCls.cFunction(this);
					//---------------------------------------------------------------------------------------------------
					//폼 타이틀 생성 : Part - PartNo(PartName)
					//---------------------------------------------------------------------------------------------------
					if (this.mv_sPartInfoString != null)
						this.Text = this.Text + " - " + this.mv_sPartInfoString;
					//---------------------------------------------------------------------------------------------------
					//Tab Title 제거
					//---------------------------------------------------------------------------------------------------
					this.tabParts.Appearance = TabAppearance.FlatButtons;
					this.tabParts.ItemSize = new Size(0, 1);
					this.tabParts.SizeMode = TabSizeMode.Fixed;
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_ProfileCard"));
					//---------------------------------------------------------------------------------------------------
					//Tab Page별 항목 초기화
					//---------------------------------------------------------------------------------------------------
					this.mf_InitAllTabPages();
					//---------------------------------------------------------------------------------------------------
					//TreeView 초기화
					//---------------------------------------------------------------------------------------------------
					this.mv_oFunc.pf_TreeInit(this.treeParts, null, this.mv_frmMain.imageTreeNode, false, System.Windows.Forms.MouseButtons.Right);
					//this.mv_oFunc.pf_TreeInit_DragDrop(this.treeParts, this.mf_TreeNode_DragDrop, 3);												//Drag & Grop 초기화
					//---------------------------------------------------------------------------------------------------
					//TreeView에 Parts 데이터 출력
					//---------------------------------------------------------------------------------------------------
					this.txtSelectedNodeCid.Text = this.mv_sPartsRootCid;
					this.txtSelectedNodeOid.Text = this.mv_sPartsRootCid;
					this.pf_ReadPartsTreeView(20, Convert.ToInt32(this.mv_sPartsRootOid));
					if (this.treeParts.Nodes.Count > 0)
					{
						this.treeParts.SelectedNode = this.treeParts.Nodes[0];
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 언로드 될 때 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmParts_FormClosing(object sender, FormClosingEventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_CheckBomExitMsg(this.mv_frmMain.pv_bChildFormExitMsgDispOK, this.Text, ref e);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>폼 언로드 되고 발생</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void frmParts_FormClosed(object sender, FormClosedEventArgs e)
			{
				try
				{
					//폼 닫기가 확정된 경우에만 해쉬에서 제거
					this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.EXIT, this.Text, null, null);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>SplitterLeftV 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeftV_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeft.Width = ComCls.cConst.PC_PARTS_FORM_LEFTMENU_DEFAULT_WIDTH;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>SplitterLeftH 마우스 더블 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void splitterLeftH_MouseDoubleClick(object sender, MouseEventArgs e)
			{
				try
				{
					//좌측 메뉴 판넬 기본 넓이 설정
					this.panelLeftBottom.Height = ComCls.cConst.PC_PARTS_FORM_LEFTMENU_DEFAULT_HEIGHT;
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [공통 - Parts 메뉴(좌측하단) 이벤트 - Tab Page Control 전환]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Parts 메뉴(좌측하단) 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Profile Card 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_ProfileCard_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_ProfileCard"));
					//---------------------------------------------------------------------------------------------------
					//ProfileCard Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_ProfileCard");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - BOM 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_Bom_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_Bom"));
					//---------------------------------------------------------------------------------------------------
					//BOM Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_Bom");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Workflow 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_Workflow_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_Changes"));
					//---------------------------------------------------------------------------------------------------
					//Changes Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_Changes");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}

			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Related Cads 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_RelatedCads_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_RelatedCads"));
					//---------------------------------------------------------------------------------------------------
					//Related Cads Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_RelatedCads");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Related Docs 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_RelatedDocs_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_RelatedDocs"));
					//---------------------------------------------------------------------------------------------------
					//Related Docs Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_RelatedDocs");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Alternate Parts 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_AlternateParts_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_AlternateParts"));
					//---------------------------------------------------------------------------------------------------
					//Alternate Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_AlternateParts");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - Revision 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_Revision_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_Revision"));
					//---------------------------------------------------------------------------------------------------
					//Revision Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_Revision");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - LifeCycle 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_LifeCycle_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_LifeCycle"));
					//---------------------------------------------------------------------------------------------------
					//LifeCycle Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_LifeCycle");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Parts Tool 메뉴 - History 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void toolParts_History_Click(object sender, EventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//왼쪽 하단 메뉴 선택된 버튼 배경색 변경
					//---------------------------------------------------------------------------------------------------
					this.mf_SelectToolMenu(this.toolParts, this.tabParts.TabPages.IndexOfKey("tabParts_History"));
					//---------------------------------------------------------------------------------------------------
					//History Tab화면 전환 
					//---------------------------------------------------------------------------------------------------
					this.tabParts.SelectedIndex = this.tabParts.TabPages.IndexOfKey("tabParts_History");
					//---------------------------------------------------------------------------------------------------
					// 탭 변경 시 트리 노드 유지
					//---------------------------------------------------------------------------------------------------
					this.mf_OccurTreeNodeSelect(this.treeParts);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [공통 - Parts Tree 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Parts Tree 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>트리 노드 선택 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void treeParts_AfterSelect(object sender, TreeViewEventArgs e)
			{
				try
				{
					//---------------------------------------------------------------------------------------------------
					//노드 키 값을 텍스트에 저장
					//---------------------------------------------------------------------------------------------------
					if (e.Node != null && e.Node.Tag != null && this.txtSelectedNodeCid.Text != ((string[])e.Node.Tag)[6].ToString() || this.txtSelectedNodeOid.Text != e.Node.Name)
					{
						this.txtSelectedNodeCid.Text = ((string[])e.Node.Tag)[6].ToString();
						this.txtSelectedNodeOid.Text = e.Node.Name;
					}
					//---------------------------------------------------------------------------------------------------
					// 트리 노드 선택 시 탭 페이지 별 진행될 작업
					//---------------------------------------------------------------------------------------------------
					this.mf_TabPageJob_SelectNode();
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Refresh 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRefreshTree_Click(object sender, EventArgs e)
			{
				TreeNode oTreeNode = null;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//선택된 노드 저장
					//---------------------------------------------------------------------------------------------------
					oTreeNode = this.treeParts.SelectedNode;
					//---------------------------------------------------------------------------------------------------
					//DB에서 트리 다시 조회
					//---------------------------------------------------------------------------------------------------
					this.pf_ReadPartsTreeView(20, Convert.ToInt32(this.mv_sPartsRootOid));
					//---------------------------------------------------------------------------------------------------
					//새로운 조회전 선택되어있던 노드 검색 및 설정
					//---------------------------------------------------------------------------------------------------
					if (this.treeParts.Nodes.Count > 0)
					{
						if (oTreeNode != null)
						{
							oTreeNode = this.pf_SearchTreeNode(this.treeParts.Nodes, oTreeNode.Name);
						}
						else
						{
							oTreeNode = this.treeParts.Nodes[0];
						}
						this.treeParts.SelectedNode = oTreeNode;
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Profile Card 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Profile Card
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Edit 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProfileCard_Edit_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						if (this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Property"].Value.ToString() == "STATE" && 
							this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Value"].Value.ToString() == "Working")
						{
							//Profile Card 메뉴 버튼 비활성화
							this.btnProfileCard_Edit.Enabled = false;
							this.btnProfileCard_Delete.Enabled = false;
							//Profile Card 저장/취소 버튼 활성화
							this.btnProfileCard_Ok.Enabled = true;
							this.btnProfileCard_Cancel.Enabled = true;
							//그리드 내 항목 편집 가능
							this.dgvProfileCard_Value.ReadOnly = false;

							this.treeParts.Enabled = false;
							this.toolParts.Enabled = false;
							this.btnRefreshTree.Enabled = false;

							this.mf_CheckCellValeChangeOk(true, this.dgvProfileCard, "dgvProfileCard_Property");
						}
						else
						{
							ComCls.cException.MessageErrorBoxShow(this, string.Format("{0} {1}", this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Value"].Value.ToString(), ComCls.cConst.PC_ERROR_NOT_UPDATE), ComCls.cConst.PC_ERROR_NOT_CRUD_TITLE);
						}

					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Delete 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProfileCard_Delete_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						if (this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Property"].Value.ToString() == "STATE" &&
							this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Value"].Value.ToString() == "Working")
						{
							if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}]{1}", this.treeParts.SelectedNode.Text, ComCls.cConst.PC_MSG_APPBOM_DELETE_CONFIRM),
																							ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE) == System.Windows.Forms.DialogResult.Yes)
							{
								//---------------------------------------------------------------------------------------------------
								//삭제 처리 -> 정상일 경우 true 반환
								//---------------------------------------------------------------------------------------------------
								if (this.mf_CUDPartsProfileCard("SP_PARTS_PROFILECARD_CUD", "DELETE_PARTS", Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text)) == true)
								{
									//---------------------------------------------------------------------------------------------------
									//삭제된 노드를 트리에서 직접 제거
									//---------------------------------------------------------------------------------------------------
									this.treeParts.SelectedNode.Remove();
									//---------------------------------------------------------------------------------------------------
									//선택노드가 없다면 그리드의 모든 행 삭제
									//---------------------------------------------------------------------------------------------------
									if (this.treeParts.SelectedNode == null)
									{
										this.dgvProfileCard.Rows.Clear();
										this.dgvSubProfileCard.Rows.Clear();
									}
								}
								else
								{
									ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_MSG_APPBOM_DELETE_ERROR, ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);
								}
							}
						}
						else
						{
							ComCls.cException.MessageErrorBoxShow(this, string.Format("{0} {1}", this.dgvProfileCard.Rows[5].Cells["dgvProfileCard_Value"].Value.ToString(), ComCls.cConst.PC_ERROR_NOT_DELETE), ComCls.cConst.PC_ERROR_NOT_CRUD_TITLE);
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>OK(저장) 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProfileCard_Ok_Click(object sender, EventArgs e)
			{
				bool bCheckNullOK = true;
				TreeNode oTreeNode = null;

				try
				{
					//---------------------------------------------------------------------------------------------------
					//Property에 Null 체크 -> Null일경우 시스템오류발생
					//- System에서 입력하는 Created By, Creation Date는 체크제외
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvProfileCard.Rows.Count - 2; nRow++)
					{
						if (this.dgvProfileCard.Rows[nRow].Cells["dgvProfileCard_Value"].Value == null || this.dgvProfileCard.Rows[nRow].Cells["dgvProfileCard_Value"].Value.ToString().Trim() == "")
						{
							ComCls.cException.MessageErrorBoxShow(this, string.Format("[{0}] {1}", this.dgvProfileCard.Rows[nRow].Cells["dgvProfileCard_Property"].Value.ToString(), ComCls.cConst.PC_ERROR_NO_PROPERTY),
																	ComCls.cConst.PC_ERROR_NO_PROPERTY_TITLE);
							bCheckNullOK = false;
							break;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//Null 체크 후 정상적으로 저장 가능 시
					//---------------------------------------------------------------------------------------------------
					if (bCheckNullOK == true)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}]{1}", this.treeParts.SelectedNode.Text, ComCls.cConst.PC_MSG_APPBOM_UPDATE_CONFIRM),
																						ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							oTreeNode = this.treeParts.SelectedNode;
							//---------------------------------------------------------------------------------------------------
							//수정 처리 -> 정상일 경우 true 반환
							//---------------------------------------------------------------------------------------------------
							if (this.mf_CUDPartsProfileCard("SP_PARTS_PROFILECARD_CUD", "UPDATE_PARTS", Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text)) == true)
							{
								this.btnProfileCard_Edit.Enabled = true;
								this.btnProfileCard_Delete.Enabled = true;
								this.btnProfileCard_Ok.Enabled = false;
								this.btnProfileCard_Cancel.Enabled = false;
								this.dgvProfileCard_Value.ReadOnly = true;
								this.treeParts.Enabled = true;
								this.toolParts.Enabled = true;
								this.btnRefreshTree.Enabled = true;
								//---------------------------------------------------------------------------------------------------
								//DB에서 트리 다시 조회
								//---------------------------------------------------------------------------------------------------
								this.pf_ReadPartsTreeView(20, Convert.ToInt32(this.mv_sPartsRootOid));
								//---------------------------------------------------------------------------------------------------
								//새로운 조회전 선택되어있던 노드 검색 및 설정
								//---------------------------------------------------------------------------------------------------
								if (this.treeParts.Nodes.Count > 0)
								{
									if (oTreeNode != null)
									{
										oTreeNode = this.pf_SearchTreeNode(this.treeParts.Nodes, oTreeNode.Name);
									}
									else
									{
										oTreeNode = this.treeParts.Nodes[0];
									}
									this.treeParts.SelectedNode = oTreeNode;
								}
							}
							else
							{
								ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_MSG_APPBOM_UPDATE_ERROR, ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
							}
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Cancel 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnProfileCard_Cancel_Click(object sender, EventArgs e)
			{
				try
				{
					//Profile Card 메뉴 버튼 활성화
					this.btnProfileCard_Edit.Enabled = true;
					this.btnProfileCard_Delete.Enabled = true;
					//Profile Card 저장/취소 버튼 비활성화
					this.btnProfileCard_Ok.Enabled = false;
					this.btnProfileCard_Cancel.Enabled = false;
					//그리드 내 항목 편집 불가능
					this.dgvProfileCard_Value.ReadOnly = true;

					this.treeParts.Enabled = true;
					this.toolParts.Enabled = true;
					this.btnRefreshTree.Enabled = true;

					//---------------------------------------------------------------------------------------------------
					//그리드 항목정보 다시 읽어오기 - 기존작성한것을 되돌리기 위해
					//---------------------------------------------------------------------------------------------------
					this.mf_ReadProfileCardGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>ProfileCard 셀 항목 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvProfileCard_CellClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvProfileCard.Rows.Count > 0)
					{
						this.mf_LockCellValue(this.dgvProfileCard, e, "dgvProfileCard_Property", "dgvProfileCard_Value", "dgvProfileCard_CodeValue");
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Sub Profile Card(Cad 정보) 셀 항목 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvSubProfileCard_CellContentClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvSubProfileCard.SelectedRows != null && e.ColumnIndex == this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_Name"].ColumnIndex)
					{
						frmViewCads ofrmViewCads = new frmViewCads(this.mv_frmMain, this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_DocsCid"].Value.ToString(),
															this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_DocsOid"].Value.ToString(),
															this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_Number"].Value.ToString() + "(" + this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_Name"].Value.ToString() + ")");

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "View Cads" + " - " + this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_Number"].Value.ToString() + "(" + this.dgvSubProfileCard.SelectedRows[0].Cells["dgvSubProfileCard_Name"].Value.ToString() + ")",
													(object)ofrmViewCads, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [BOM 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//BOM 이벤트
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>BOM Edit 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Edit_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						this.btnBom_Edit.Enabled = false;
						this.btnBom_AddNewPart.Enabled = true;
						this.btnBom_AddExistPart.Enabled = true;
						this.btnBom_ReplaceNewPart.Enabled = true;
						this.btnBom_ReplaceExistPart.Enabled = true;
						this.btnBom_Delete.Enabled = true;
						this.btnBom_Save.Enabled = true;
						this.btnBom_Reset.Enabled = true;
						this.btnBom_Cancel.Enabled = true;
						this.dgvBom_ChkBox.ReadOnly = false;
						this.dgvBom_Seq.ReadOnly = false;
						this.dgvBom_Qty.ReadOnly = false;

						this.treeParts.Enabled = false;
						this.toolParts.Enabled = false;
						this.btnRefreshTree.Enabled = false;
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Add New Part 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_AddNewPart_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvBom.SelectedRows != null)
					{
						frmCreateParts ofrmCreateParts = new frmCreateParts(this.mv_frmMain, this, "CREATE_NEW_PARTS", this.txtSelectedNodeCid.Text, this.txtSelectedNodeOid.Text, this.dgvBom);
						ofrmCreateParts.ShowDialog();
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Add Exist Part 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_AddExistPart_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvBom.SelectedRows != null)
					{
						frmSearch ofrmSearch = new frmSearch(this.mv_frmMain, this, "BOM(Add Exist Parts) - Parts", null, null, this.dgvBom);

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "BOM(Add Exist Parts) - Parts Search", (object)ofrmSearch, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Replace New Part 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_ReplaceNewPart_Click(object sender, EventArgs e)
			{
				if (this.treeParts.SelectedNode != null && this.dgvBom.SelectedRows != null)
				{
					frmCreateParts ofrmCreateParts = new frmCreateParts(this.mv_frmMain, this, "REPLACE_NEW_PARTS", this.txtSelectedNodeCid.Text, this.txtSelectedNodeOid.Text, this.dgvBom);
					ofrmCreateParts.ShowDialog();
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Replace Exist Part 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_ReplaceExistPart_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvBom.SelectedRows != null)
					{
						frmSearch ofrmSearch = new frmSearch(this.mv_frmMain, this, "BOM(Replace Exist Parts) - Parts", null, null, this.dgvBom);

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "BOM(Replace Exist Parts) - Parts Search", (object)ofrmSearch, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Delete 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Delete_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;
				int nRowCount = -1;
				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvBom.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvBom.Rows[nRow].Cells["dgvBom_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//삭제 항목 체크가 있을 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						nRowCount = this.dgvBom.Rows.Count;

						if (nRowCount > 0)
						{
							for (int nRow = nRowCount - 1; nRow >= 0; nRow--)
							{
								if (Convert.ToBoolean(this.dgvBom.Rows[nRow].Cells["dgvBom_ChkBox"].Value) == true)
								{
									//this.dgvBom.Rows.Remove(this.dgvBom.Rows[nRow]);
									this.dgvBom.Rows[nRow].Cells["dgvBom_Action"].Value = "D";
								}
							}
						}

						this.dgvBom.Refresh();
					}
					//---------------------------------------------------------------------------------------------------
					//삭제 목록 체크가 없을 경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_PARTS_SELECTED, ComCls.cConst.PC_ERROR_NO_PARTS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Save 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Save_Click(object sender, EventArgs e)
			{
				bool bResult = false;

				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				string sSID = null;
				//---------------------------------------------------------------------------------------------------
				string sUrl = null;
				string sWebSql = null;
				string sJobMode = null;
				string sUserErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				int nCheckEditedCount = 0;
				TreeNode oTreeNode = null;

				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvBom.Rows.Count > 0)
					{
						for (int nRow = 0; nRow < this.dgvBom.Rows.Count; nRow++)
						{
							if (this.dgvBom.Rows[nRow].Cells["dgvBom_Action"].Value.ToString() != "R")
							{
								nCheckEditedCount++;
							}
						}
						if (nCheckEditedCount > 0)
						{
							if (ComCls.cException.MessageConfirmBoxShow(this, "작성하신 내용을 저장하시겠습니까?", "BOM") == System.Windows.Forms.DialogResult.Yes)
							{
								oTreeNode = this.treeParts.SelectedNode;

								//데이터베이스 연결 명령 만들기
								if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT, null, null, null, -1, ref sUrl, null) == true)
								{
									//데이터베이스 연결
									if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
									{
										//세션 ID가 생성된 경우
										if (sSID != null)
										{
											//데이터베이스 트랜잭션 시작 명령 만들기
											if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN, sSID, null, null, -1, ref sUrl, null) == true)
											{
												//데이터베이스 트랜잭션 시작
												if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
												{
													//---------------------------------------------------------------------------------------------------
													//데이터그리드뷰를 스캔해서 수정된 행을 DB-UPDATE 처리
													//---------------------------------------------------------------------------------------------------
													for (int nRow = 0; nRow < this.dgvBom.Rows.Count; nRow++)
													{
														sWebSql = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}",
																				ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_BOM_TREE_CUD",
																				"iJOBMODE", this.dgvBom.Rows[nRow].Cells["dgvBom_Action"].Value.ToString(),
																				"iTREECID", this.dgvBom.Rows[nRow].Cells["dgvBom_TreeCid"].Value.ToString(),
																				"iTREEOID", this.dgvBom.Rows[nRow].Cells["dgvBom_TreeOid"].Value.ToString(),
																				"iITEMCID", this.dgvBom.Rows[nRow].Cells["dgvBom_Cid"].Value.ToString(),
																				"iITEMOID", this.dgvBom.Rows[nRow].Cells["dgvBom_Oid"].Value.ToString(),
																				"iPARCID", this.dgvBom.Rows[nRow].Cells["dgvBom_ParCid"].Value.ToString(),
																				"iPAROID", this.dgvBom.Rows[nRow].Cells["dgvBom_ParOid"].Value.ToString(),
																				"iSEQ", this.dgvBom.Rows[nRow].Cells["dgvBom_Seq"].Value.ToString(),
																				"iQTY", this.dgvBom.Rows[nRow].Cells["dgvBom_Qty"].Value.ToString(),
																				ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
														if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, this.dgvBom, "dgvBom_Action", nRow, ref sUrl, sWebSql) == true)
														{
															//데이터베이스 Sql 처리
															if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
															{
																//데이터베이스 처리 성공인 경우
																if (nRowCount > 0)
																{
																	bResult = true;
																}
																else
																{
																	bResult = false;

																	sUserErrorMsg = string.Format("{0}번 행에서 오류", nRow + 1);

																	//에러 발생 행 선택
																	//this.mv_oFunc.pf_DataGridViewAllUnSelectCell(this.dgvBom, nRow);

																	break;
																}
																//---------------------------------------------------------------------------------------------------
															}
															else
															{
																bResult = false;

																sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg);

																break;
															}
														}
													}
													//---------------------------------------------------------------------------------------------------
													//데이터베이스 트랜잭션 처리
													//---------------------------------------------------------------------------------------------------
													if (bResult == true)
													{
														//데이터베이스 트랜잭션 완료 명령 만들기
														if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT, sSID, null, null, -1, ref sUrl, null) == true)
														{
															//데이터베이스 트랜잭션 완료
															if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
															{
																//결과 메세지 출력
																ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_UPDATE), ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);

																//데이터그리드뷰를 스캔해서 수정된 행 플래그를 조회 모드로 변경
																for (int nRow = 0; nRow < this.dgvBom.Rows.Count; nRow++)
																{
																	sJobMode = this.dgvBom.Rows[nRow].Cells["dgvBom_Action"].Value.ToString();

																	if (sJobMode != ComCls.cConst.PC_DB_JOBMODE_READ)
																	{
																		this.dgvBom.Rows[nRow].Cells["dgvBom_Action"].Value = ComCls.cConst.PC_DB_JOBMODE_READ;
																	}
																}

																this.treeParts.Enabled = true;
																this.toolParts.Enabled = true;

																this.btnBom_Edit.Enabled = true;
																this.btnBom_AddNewPart.Enabled = false;
																this.btnBom_AddExistPart.Enabled = false;
																this.btnBom_ReplaceNewPart.Enabled = false;
																this.btnBom_ReplaceExistPart.Enabled = false;
																this.btnBom_Delete.Enabled = false;

																this.dgvBom_Qty.ReadOnly = true;
																this.dgvBom_Seq.ReadOnly = true;

																this.btnBom_Save.Enabled = false;
																this.btnBom_Reset.Enabled = false;
															}
														}

														this.pf_ReadPartsTreeView(20, Convert.ToInt32(this.mv_sPartsRootOid));
														if (this.treeParts.Nodes.Count > 0)
														{
															if (oTreeNode != null)
															{
																oTreeNode = this.pf_SearchTreeNode(this.treeParts.Nodes, oTreeNode.Name);
															}
															else
															{
																oTreeNode = this.treeParts.Nodes[0];
															}
															this.treeParts.SelectedNode = oTreeNode;
														}
														//this.mf_ReadBOMGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));

													}
													else
													{
														//데이터베이스 트랜잭션 취소 명령 만들기
														if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK, sSID, null, null, -1, ref sUrl, null) == true)
														{
															//데이터베이스 트랜잭션 취소
															this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID);

															ComCls.cException.MessageBoxShow(this, sUserErrorMsg, ComCls.cConst.PC_MSG_APPBOM_UPDATE_TITLE);
														}
													}
													//---------------------------------------------------------------------------------------------------
												}
											}
										}
									}
								}
							}
						}
					}
				}			
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Reset 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Reset_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, "이전 내용으로 되돌리시겠습니까?\n\n작성된 내용은 모두 되돌아갑니다.", "BOM") == System.Windows.Forms.DialogResult.Yes)
						{
							//---------------------------------------------------------------------------------------------------
							//그리드 내용 다시읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadBOMGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>BOM Cancel 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Cancel_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, "편집내용을 취소하시겠습니까?\n\n작성된 내용은 모두 되돌아갑니다.", "BOM") == System.Windows.Forms.DialogResult.Yes)
						{
							//---------------------------------------------------------------------------------------------------
							//그리드 내용 다시읽어오기
							//---------------------------------------------------------------------------------------------------
							this.mf_ReadBOMGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));

							this.btnBom_Edit.Enabled = true;
							this.btnBom_AddNewPart.Enabled = false;
							this.btnBom_AddExistPart.Enabled = false;
							this.btnBom_ReplaceNewPart.Enabled = false;
							this.btnBom_ReplaceExistPart.Enabled = false;
							this.btnBom_Delete.Enabled = false;
							this.btnBom_Save.Enabled = false;
							this.btnBom_Reset.Enabled = false;
							this.btnBom_Cancel.Enabled = false;
							this.dgvBom_ChkBox.ReadOnly = true;
							this.dgvBom_Seq.ReadOnly = true;
							this.dgvBom_Qty.ReadOnly = true;

							this.treeParts.Enabled = true;
							this.toolParts.Enabled = true;
							this.btnRefreshTree.Enabled = true;
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>BOM Report 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnBom_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvBom);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>상세 화면을 볼 Part 선택 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvBom_CellContentClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvBom.SelectedRows != null && e.ColumnIndex == this.dgvBom.SelectedRows[0].Cells["dgvBom_PartName"].ColumnIndex)
					{
						frmParts ofrmParts = new frmParts(this.mv_frmMain, this.dgvBom.SelectedRows[0].Cells["dgvBom_Cid"].Value.ToString(),
															this.dgvBom.SelectedRows[0].Cells["dgvBom_Oid"].Value.ToString(),
															this.dgvBom.SelectedRows[0].Cells["dgvBom_PartNumber"].Value.ToString() + "(" + this.dgvBom.SelectedRows[0].Cells["dgvBom_PartName"].Value.ToString() + ")");

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "Parts" + " - " + this.dgvBom.SelectedRows[0].Cells["dgvBom_PartNumber"].Value.ToString() + "(" + this.dgvBom.SelectedRows[0].Cells["dgvBom_PartName"].Value.ToString() + ")",
													(object)ofrmParts, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Changes 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Changes
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Related CADs 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Related CADs
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>New CADs(2D) Drawings 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRelatedCads_NewCads2D_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						frmCreateCads ofrmCreateCads = new frmCreateCads(this, "2D DRAWINGS", this.txtSelectedNodeCid.Text, this.txtSelectedNodeOid.Text);
						ofrmCreateCads.ShowDialog();
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>New CADs(3D) Models 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRelatedCads_NewCads3D_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						frmCreateCads ofrmCreateCads = new frmCreateCads(this, "3D MODELS", this.txtSelectedNodeCid.Text, this.txtSelectedNodeOid.Text);
						ofrmCreateCads.ShowDialog();
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Search CADS 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRelatedCads_SearchCads_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null)
					{
						frmSearch ofrmSearch = new frmSearch(this.mv_frmMain, this, "Parts - Cads", this.txtSelectedNodeCid.Text, this.txtSelectedNodeOid.Text);

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "Parts - Cads Search", (object)ofrmSearch, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Delete 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRelatedCads_Delete_Click(object sender, EventArgs e)
			{
				int nCheckRowCount = 0;
				TreeNode oTreeNode = null;
				//---------------------------------------------------------------------------------------------------
				bool bResult = false;

				string sDataSet = null;
				DataSet oDataSet = null;
				int nRowCount = 0;
				int nColCount = 0;
				string sErrorMsg = null;
				string sSID = null;
				//---------------------------------------------------------------------------------------------------
				string sUrl = null;
				string sWebSql = null;
				string sJobMode = null;
				string sUserErrorMsg = null;
				//---------------------------------------------------------------------------------------------------
				try
				{
					//---------------------------------------------------------------------------------------------------
					//CheckBox 체크 여부 확인
					//---------------------------------------------------------------------------------------------------
					for (int nRow = 0; nRow < this.dgvRelatedCads.Rows.Count; nRow++)
					{
						if (Convert.ToBoolean(this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_ChkBox"].Value) == true)
						{
							nCheckRowCount++;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//삭제 목록 체크가 있을 경우
					//---------------------------------------------------------------------------------------------------
					if (nCheckRowCount > 0)
					{
						if (ComCls.cException.MessageConfirmBoxShow(this, ComCls.cConst.PC_MSG_DELETE_CADS, ComCls.cConst.PC_MSG_DELETE_CADS_TITLE) == System.Windows.Forms.DialogResult.Yes)
						{
							oTreeNode = this.treeParts.SelectedNode;

							//데이터베이스 연결 명령 만들기
							if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.CONNECT, null, null, null, -1, ref sUrl, null) == true)
							{
								//데이터베이스 연결
								if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
								{
									//세션 ID가 생성된 경우
									if (sSID != null)
									{
										//데이터베이스 트랜잭션 시작 명령 만들기
										if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.BEGINTRAN, sSID, null, null, -1, ref sUrl, null) == true)
										{
											//데이터베이스 트랜잭션 시작
											if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
											{
												//---------------------------------------------------------------------------------------------------
												//데이터그리드뷰를 스캔해서 수정된 행을 DB-UPDATE 처리
												//---------------------------------------------------------------------------------------------------
												for (int nRow = 0; nRow < this.dgvRelatedCads.Rows.Count; nRow++)
												{
													sWebSql = string.Format("{0}={1}&{2}={3}&{4}={5}&{6}={7}&{8}={9}&{10}={11}&{12}={13}&{14}={15}&{16}={17}&{18}={19}&{20}={21}&{22}={23}&{24}={25}&{26}={27}",
																			ComCls.cConst.PC_WEBSQL_CMD_SP, "SP_PARTS_RELATEDCADS_CUD",
																			"iJOBMODE", "DELETE_CADS",
																			"iREL_OID", Convert.ToInt32(this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_RelOid"].Value.ToString()),
																			"iPAR_CID", Convert.ToInt32(this.txtSelectedNodeCid.Text),
																			"iPAR_OID", Convert.ToInt32(this.txtSelectedNodeOid.Text),
																			"iSON_CID", Convert.ToInt32(this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_DocsCid"].Value.ToString()),
																			"iSON_OID", Convert.ToInt32(this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_DocsOid"].Value.ToString()),
																			"iCADTYPE", "", "iCADNUMBER", "", "iCADNAME", "", "iDESC", "", "iREVISION", "", "iREMARK", "",
																			ComCls.cConst.PC_WEBSQL_CMD_SID, sSID);
													if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.EXECSQL, sSID, this.dgvRelatedCads, "dgvRelatedCads_ChkBox", nRow, ref sUrl, sWebSql) == true)
													{
														//데이터베이스 Sql 처리
														if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
														{
															//데이터베이스 처리 성공인 경우
															if (nRowCount > 0)
															{
																bResult = true;
															}
															else
															{
																bResult = false;

																sUserErrorMsg = string.Format("{0}번 행에서 오류", nRow + 1);

																//에러 발생 행 선택
																this.mv_oFunc.pf_DataGridViewAllUnSelectCell(this.dgvRelatedCads, nRow);

																break;
															}
															//---------------------------------------------------------------------------------------------------
														}
														else
														{
															bResult = false;

															sUserErrorMsg = string.Format("{0}{1}", "[오류]", sErrorMsg);

															break;
														}
													}
												}
												//---------------------------------------------------------------------------------------------------
												//데이터베이스 트랜잭션 처리
												//---------------------------------------------------------------------------------------------------
												if (bResult == true)
												{
													//데이터베이스 트랜잭션 완료 명령 만들기
													if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.COMMIT, sSID, null, null, -1, ref sUrl, null) == true)
													{
														//데이터베이스 트랜잭션 완료
														if (this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID) == true)
														{
															//결과 메세지 출력
															ComCls.cException.MessageBoxShow(this, string.Format("{0}건 {1}", nRowCount, ComCls.cConst.PC_MSG_APPBOM_DELETE), ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);

															//데이터그리드뷰를 스캔해서 수정된 행 플래그를 조회 모드로 변경
															for (int nRow = 0; nRow < this.dgvRelatedCads.Rows.Count; nRow++)
															{
																sJobMode = this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_Action"].Value.ToString();

																if (sJobMode != ComCls.cConst.PC_DB_JOBMODE_READ)
																{
																	this.dgvRelatedCads.Rows[nRow].Cells["dgvRelatedCads_Action"].Value = ComCls.cConst.PC_DB_JOBMODE_READ;
																}
															}

															this.dgvRelatedCads.Refresh();
														}
													}
												}
												else
												{
													//데이터베이스 트랜잭션 취소 명령 만들기
													if (this.mf_MakeWpUrlAndTCUD(ComCls.cConst.PE_DB_TRANSACTION_COMMAND.ROLLBACK, sSID, null, null, -1, ref sUrl, null) == true)
													{
														//데이터베이스 트랜잭션 취소
														this.mv_oFunc.pf_WpExecSql(ComCls.cConst.PE_WEBSQL_MODE.TCUD, ComCls.cConst.PE_WEBSQL_TYPE.PARSE, sUrl, ref sDataSet, ref oDataSet, ref nRowCount, ref nColCount, ref sErrorMsg, ref sSID);

														ComCls.cException.MessageBoxShow(this, sUserErrorMsg, ComCls.cConst.PC_MSG_APPBOM_DELETE_TITLE);
													}
												}
												//---------------------------------------------------------------------------------------------------
											}
										}
									}
								}
							}
							this.treeParts.SelectedNode = null;
							this.treeParts.SelectedNode = oTreeNode;
						}
					}
					//---------------------------------------------------------------------------------------------------
					//삭제 목록 체크가 없을 경우
					//---------------------------------------------------------------------------------------------------
					else
					{
						ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_NO_CADS_SELECTED, ComCls.cConst.PC_ERROR_NO_CADS_PROPERTY_TITLE);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRelatedCads_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvRelatedCads);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Views 콤보 박스 값 변경 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void cmbRelatedCads_View_SelectedIndexChanged(object sender, EventArgs e)
			{
				try
				{
					if (this.cmbRelatedCads_View.SelectedItem != null)
					{
						if (this.cmbRelatedCads_View.SelectedItem.ToString() == "All")
							this.mv_sRelatedCads_Views = null;
						else
							this.mv_sRelatedCads_Views = this.cmbRelatedCads_View.SelectedItem.ToString();

					}
					if (this.treeParts.SelectedNode != null)
					{
						this.mf_ReadRelatedCadGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text), this.mv_sRelatedCads_Views);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>상세 화면을 볼 Cad 선택 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void dgvRelatedCads_CellContentClick(object sender, DataGridViewCellEventArgs e)
			{
				try
				{
					if (this.dgvRelatedCads.SelectedRows != null && e.ColumnIndex == this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_CadName"].ColumnIndex)
					{
						frmViewCads ofrmViewCads = new frmViewCads(this.mv_frmMain, this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_DocsCid"].Value.ToString(),
															this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_DocsOid"].Value.ToString(),
															this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_CadNumber"].Value.ToString() + "(" + this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_CadName"].Value.ToString() + ")");

						this.mv_oFunc.pf_AppBomRun(ComCls.cConst.PE_ARGTYPE_APP_STATUS.RUN, "View Cads" + " - " + this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_CadNumber"].Value.ToString() + "(" + this.dgvRelatedCads.SelectedRows[0].Cells["dgvRelatedCads_CadName"].Value.ToString() + ")",
													(object)ofrmViewCads, this.mv_frmMain);
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Related DOCs 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Related DOCs
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Alternate Parts 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Alternate Parts
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [Revision 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//Revision
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Revise(개정) 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRevision_Revise_Click(object sender, EventArgs e)
			{
				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvRevision.SelectedRows != null)
					{
						if (this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Approve" || this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Release")
						{
							
						}
						else
						{
							ComCls.cException.MessageErrorBoxShow(this, string.Format("{0} {1}", this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString(), ComCls.cConst.PC_ERROR_NOT_REVISION), ComCls.cConst.PC_ERROR_NOT_CRUD_TITLE);
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Release 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRevision_Release_Click(object sender, EventArgs e)
			{
				bool bResult;

				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvRevision.SelectedRows != null)
					{
						//---------------------------------------------------------------------------------------------------
						//선택된 Parts의 현재 상태(State) 확인
						//---------------------------------------------------------------------------------------------------
						//if (this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Approve" || this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Release")
						if (this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Release")
						{
							ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_APPROVED_ALREADY, ComCls.cConst.PC_ERROR_APPROVED_TITLE);
						}
						else
						{
							if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}] {1}{2}", this.dgvRevision.SelectedRows[0].Cells["dgvRevision_PartName"].Value.ToString(), this.dgvRevision.SelectedRows[0].Cells["dgvRevision_PartNumber"].Value.ToString(),
								ComCls.cConst.PC_MSG_APPROVE_PARTS), ComCls.cConst.PC_MSG_APPROVE_PARTS_TITLE) == System.Windows.Forms.DialogResult.Yes)
							{
								//---------------------------------------------------------------------------------------------------
								//Release 로 변경 처리
								//---------------------------------------------------------------------------------------------------
								bResult = this.mf_CUDChangeRevisionStatus(Convert.ToInt32(this.dgvRevision.SelectedRows[0].Cells["dgvRevision_Cid"].Value.ToString()), Convert.ToInt32(this.dgvRevision.SelectedRows[0].Cells["dgvRevision_Oid"].Value.ToString()), "RELEASE_PARTS");

								if (bResult == true)
								{
									this.mf_ReadRevisionGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
								}
							}
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Working 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRevision_Working_Click(object sender, EventArgs e)
			{
				bool bResult;

				try
				{
					if (this.treeParts.SelectedNode != null && this.dgvRevision.SelectedRows != null)
					{
						//---------------------------------------------------------------------------------------------------
						//선택된 Parts의 현재 상태(State) 확인
						//---------------------------------------------------------------------------------------------------
						if (this.dgvRevision.SelectedRows[0].Cells["dgvRevision_State"].Value.ToString() == "Working")
						{
							ComCls.cException.MessageErrorBoxShow(this, ComCls.cConst.PC_ERROR_WORKING_ALREADY, ComCls.cConst.PC_ERROR_WORKING_TITLE);
						}
						else
						{
							if (ComCls.cException.MessageConfirmBoxShow(this, string.Format("[{0}] {1}{2}", this.dgvRevision.SelectedRows[0].Cells["dgvRevision_PartName"].Value.ToString(), this.dgvRevision.SelectedRows[0].Cells["dgvRevision_PartNumber"].Value.ToString(),
								ComCls.cConst.PC_MSG_WORKING_PARTS), ComCls.cConst.PC_MSG_WORKING_PARTS_TITLE) == System.Windows.Forms.DialogResult.Yes)
							{
								//---------------------------------------------------------------------------------------------------
								//Working 으로 변경 처리
								//---------------------------------------------------------------------------------------------------
								bResult = this.mf_CUDChangeRevisionStatus(Convert.ToInt32(this.dgvRevision.SelectedRows[0].Cells["dgvRevision_Cid"].Value.ToString()), Convert.ToInt32(this.dgvRevision.SelectedRows[0].Cells["dgvRevision_Oid"].Value.ToString()), "WORKING_PARTS");

								if (bResult == true)
								{
									this.mf_ReadRevisionGridView(Convert.ToInt32(this.txtSelectedNodeCid.Text), Convert.ToInt32(this.txtSelectedNodeOid.Text));
								}
							}
						}
					}
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			///-------------------------------------------------------------------------------------------------------------------------
			/// <summary>Report 버튼 클릭 시</summary>
			///-------------------------------------------------------------------------------------------------------------------------
			private void btnRevision_Reports_Click(object sender, EventArgs e)
			{
				try
				{
					this.mv_oFunc.pf_ExcelFromDataGridView(this.dgvRevision);
				}
				catch (Exception ex)
				{
					ComCls.cException.ExceptionMessageBox(ex, this);
				}
			}
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [LifeCycle 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//LifeCycle
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬

			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#region [History 이벤트]
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			//History
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
			#endregion
			//▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬
		
		#endregion

		//▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀
	}// End class frmParts
}// End namespace TimsXBX
